const db = require('../utils/db.js')


// 加密工具包
const bcrypt = require('bcryptjs')
// 引入jwt
const jwt = require('jsonwebtoken')
// 引入加密字符串
const config = require('../../config')


// 家长
const parentsLogin = (req, res) => {
  const sql = `select * from t_parents where phone=?`
  db.query(sql, req.body.phone, (err, results) => {
    if (err) return res.cc(err)
    if (results.length < 1) {
      return res.ok(null, "账号不存在")
    }
    const { password } = req.body
    const compareResult = bcrypt.compareSync(password, results[0].password)
    if (!compareResult) {
      return res.cc("密码错误，登录失败！")
    }
    // 2.用username生成token对象，响应回去
    const parents = { ...results[0], password: '', }
    // role: ["/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121",]
    // 后续在这里加入权限列表
    const tokenStr = jwt.sign(parents, config.jwtSecretKey, { expiresIn: '24h' })
    res.ok({ token: 'Bearer ' + tokenStr }, "登录成功")

  })
}

const parentsRegister = (req, res) => {
  const sql = `select * from t_parents where phone=?`
  db.query(sql, req.body.phone, (err, results) => {
    if (err) return res.cc(err)
    if (results.length > 0) {
      return res.ok(null, "该账号已经存在，若非自己注册，请联系教师", 204)
    }
    let { phone, password, name,student_name } = req.body
    // 查询学生 
    db.query(`select * from t_student where name=? and p_phone=?`,[student_name,phone],(err,results)=>{
      if (err) return res.cc(err)
      if(results.length<=0) return res.cc("验证信息失败")
      // 插入
      const sql = `update t_student set p_name=? where p_phone=?`
      db.query(sql, [name, phone], (err, results) => {

        if (err) return res.err("出错了，请稍后重试" + err)
        const sql = `insert into t_parents set ?`
        // 密码加密
        password = bcrypt.hashSync(password, 10)
        db.query(sql, { phone, password, name }, (err, results) => {
          console.log(err);
          if (err) return res.cc(err)
          console.log(results);
          if (results.affectedRows >= 1) {
            return res.ok(null, "注册成功")
          }
        })
      })
    })
  })
}
const parentsSelect = (req, res) => {


  // SELECT tu.name AS teacherName, s.* FROM t_users AS tu,
  //   (
  //     SELECT ts.className, ts.t_id, s.* FROM t_class AS ts,
  //       (
  //         SELECT * FROM t_student WHERE p_phone =?
  //   ) AS s WHERE s.c_id = ts.id
  // ) 
  // AS s WHERE s.t_id = tu.id
  // 查询数据库中自己孩子列表
  const sql = ` 
  
    SELECT ts.className,ts.t_id,s.* FROM t_class AS ts,
    (
      SELECT * FROM t_student WHERE p_phone=?
    ) AS s WHERE s.c_id = ts.id
  
 `
  db.query(sql, req.params.phone, (err, results) => {
    if (err) return res.cc(err);
    let arr = results.filter(item => {
      const len = item.name.length
      if (len >= 3) {
        item.name = `${item.name.substring(0, 1)}*${item.name.substring(len - 1)}`
      } else {
        item.name = `${item.name.substring(0, 1)}*`
      }
      const l = item.className.length
      item.className = `${item.className.substring(0, 5)}*`
      return item
    })
    return res.ok(arr)
  })
}


/**
 * 用户注册
 */
const userRegister = async (req, res, next) => {
  console.log("userRegister执行");
  const userinfo = req.body
  // 1.先查询数据库中是否存在该用户名
  const sql = `select * from t_users where username=?`
  db.query(sql, userinfo.username, (err, results) => {
    if (err) {
      return res.json({
        meta: {
          status: 400,
          message: '出错了，请稍后重试',
        },
        data: err,
      });
    }
    if (results.length > 0) {
      return res.json({
        meta: {
          status: 400,
          message: '用户名重复，请换一个用户名',
        },
        data: null,
      });
    }
    userinfo.password = bcrypt.hashSync(userinfo.password, 10)
    const sql = `insert into t_users set ?`
    db.query(sql, userinfo, (err, results) => {
      if (err) {
        return res.json({
          meta: {
            status: 400,
            message: err,
          },
          data: null,
        });
      }
      if (results.affectedRows !== 1) {
        console.log("注册用户失败,请稍后再试！");
        // return res.send({
        //   status: 1,
        //   message: "注册用户失败,请稍后再试！"
        // })
        return res.cc("注册用户失败,请稍后再试！", 400)
      }
      res.send({
        meta: {
          status: 200,
          message: "注册成功",
        },
        data: null,
      })

    })
  })
}


/**
 * 用户登录
 */
const userLogin = async (req, res, next) => {
  console.log("userLogin执行");
  const { username, password } = req.body
  // 查询用户名是否存在
  const sql = `select * from t_users where username=?`
  db.query(sql, username, (err, results) => {
    if (err) {
      return res.cc(err)
    }
    if (results.affectedRows < 1) {
      return res.cc("用户名不存在")
    }
    // 用户名ok 验证密码 
    // 1.先将密码加密后 再与数据库对比
    const compareResult = bcrypt.compareSync(password, results[0].password)
    if (!compareResult) {
      return res.cc("密码错误，登录失败！")
    }
    // 2.用username生成token对象，响应回去
    const user = { ...results[0], password: '', }
    // role: ["/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121", "/121",]
    // 后续在这里加入权限列表
    const tokenStr = jwt.sign(user, config.jwtSecretKey, { expiresIn: '24h' })
    res.ok({ token: 'Bearer ' + tokenStr }, "登录成功")
  })

}

// const userRegister = async (req, res) => {
//   // 1. 拿到请求过来的数据
//   let user = req.body;
//   // 2. 验证数据是否正确
//   if (Object.keys(user).length == 0) {
//     return res.json({
//       meta: {
//         status: 400,
//         msg: '参数为空',
//       },
//       data: null,
//     });
//   }
//   if (!(user.userName && user.passWord && user.cellularPhone)) {
//     return res.json({
//       meta: {
//         status: 400,
//         msg: '参数错误',
//       },
//       data: null,
//     });
//   }
//   // 3. 调用操作数据库的方法
//   let b1 = await isUserNameUnique(user.userName);
//   if (!b1) {
//     return res.json({
//       meta: {
//         status: 400,
//         msg: 'userName重复',
//       },
//       data: null,
//     });
//   }
//   let b2 = await isCellularPhoneUnique(user.cellularPhone);
//   if (!b2) {
//     return res.json({
//       meta: {
//         status: 400,
//         msg: 'cellularPhone重复',
//       },
//       data: null,
//     });
//   }
//   let rs = await userMoudles.userRegister({
//     userBaseInfo: user,
//     //...
//   });
//   // 4. 返回信息
//   if (rs) {
//     return res.json({
//       meta: {
//         status: 200,
//         msg: '注册成功',
//       },
//       data: null,
//     });
//   } else {
//     return res.json({
//       meta: {
//         status: 500,
//         msg: '服务器错误,注册失败',
//       },
//       data: null,
//     });
//   }
// };



// const userLogin = async (req, res) => {
//   // 1. 拿到请求过来的数据
//   let user = req.body;
//   // 2. 验证数据是否正确
//   if (Object.keys(user).length == 0) {
//     return res.json({
//       meta: {
//         status: 400,
//         msg: '参数为空',
//       },
//       data: null,
//     });
//   }
//   if (!(user.userName && user.passWord)) {
//     return res.json({
//       meta: {
//         status: 400,
//         msg: '参数错误',
//       },
//       data: null,
//     });
//   }
//   // 3. 调用操作数据库的方法
//   let rs = await userMoudles.userLogin(user.userName, user.passWord);
//   //这里 rs 返回的是一个数组
//   // 4. 返回信息
//   if (rs) {  //返回的不是一个数组,是null,那么意味着系统错误
//     rs = rs[0];
//     if (rs) {  //返回的数组为空,没有查询到任何信息,那么就是用户名或密码错误.
//       return res.json({
//         meta: {
//           status: 200,
//           msg: '登录成功',
//         },
//         data: null,
//       });
//     } else {
//       return res.json({
//         meta: {
//           status: 400,
//           msg: '用户名或密码错误',
//         },
//         data: null,
//       });
//     }
//   } else {
//     return res.json({
//       meta: {
//         status: 500,
//         msg: '系统错误,登录失败',
//       },
//       data: null,
//     });
//   }
// };

// const isUserNameUnique = async (userName) => {
//   let num = await userMoudles.countUserName(userName);
//   return num == 0;
// };
// const isCellularPhoneUnique = async (cellularPhone) => {
//   let num = await userMoudles.countCellularPhone(cellularPhone);
//   return num == 0;
// };

module.exports = {
  userRegister,
  userLogin, parentsSelect, parentsRegister, parentsLogin
};
